[IA64] hypervisor needs to turn off psr.i after PAL_HALT_LIGHT
authorIsaku Yamahata <yamahata@valinux.co.jp>
Tue, 10 Jun 2008 06:08:06 +0000 (15:08 +0900)
committerIsaku Yamahata <yamahata@valinux.co.jp>
Tue, 10 Jun 2008 06:08:06 +0000 (15:08 +0900)
psr.i must be set to 0 on PAL entry and must be unchanged on PAL exit.
But do_block() turns on psr.i.
So we need to set it off at exit of PAL_HALT_LIGHT.

Signed-off-by: Akio Takebe <takebe_akio@jp.fujitsu.com>
xen/arch/ia64/xen/hypercall.c

index ea64cd24a8b8ce66ac93285c1ce9c00e1b196770..29268ab1285c5458038614f5c098166606cf4a62 100644 (file)
@@ -173,6 +173,14 @@ ia64_hypercall(struct pt_regs *regs)
                                /* do_block only pends a softirq */
                                do_softirq();
                                stop_timer(&v->arch.hlt_timer);
+                               /* do_block() calls
+                                * local_event_delivery_enable(),
+                                * but PALL CALL must be called with
+                                * psr.i = 0 and psr.i is unchanged.
+                                * SDM vol.2 Part I 11.10.2
+                                * PAL Calling Conventions.
+                                */
+                               local_event_delivery_disable();
                        }
                        regs->r8 = 0;
                        regs->r9 = 0;